\section{5. Patterns 2: GoF Singleton + GoF Factory Method/Abstract Factory }

\begin{center}
\line(1,0){500}
\end{center}

\begin{itemize}
\item Redegør for, hvad et software design pattern er.
\item Redegør for opbygningen af GoF Factory Method og GoF Abstract Factory. 
\item Giv et designeksempel på anvendelsen af GoF Abstract Factory. 
\item Redegør for opbygningen af GoF Singleton.
\item Redegør for fordele og ulemper ved anvendelsen af GoF Singleton 
\end{itemize}
\begin{center}
\line(1,0){500}
\end{center}

\subsubsection{Hvad er et SW Design Pattern}
\begin{itemize}
    \item Et løsnings-forslag til et almindeligt opstående problem
    \item En template
    \item En form for formel "best practice"
\end{itemize}

%Factory
\subsubsection{GOF Factory/Abstract Factory}
\begin{itemize}
    \item Splitter Creation og Use
    \item Factory laver objekter til klienten
   	
\end{itemize}
\subsubsection{Eksempel på Abstract Factory}
\includegraphics[scale=1]{5-abstractfactory}

%Singleton
\subsubsection{Singleton}
\begin{itemize}
    \item En statisk klasse der kun kan instanseres en gang
    \item Hidden/private constructor
    \item Benytter følgende metode til at tilgå singletonen
    \begin{lstlisting}
    static Singleton Singleton.GetInstance();
    \end{lstlisting}
    \item Instanseres første gang GetInstance(); bliver kaldt (lazy initialization)
    \item Efterfølgende kald vil derefter returnere det samme objekt 
\end{itemize}
\subsubsection{Fordele og Ulemper Ved Singleton}
\begin{itemize}
    \item - En Singleton er i realiteten en stor global variable
    \item - Lever i hele fra GetInstance() bliver kaldt til programmet afsluttes
    \item - Ikke altid threadsafe i alle implementationer
    \item - En skjult dependency
    \item - Øger kobling
    \item - Bryder SRP
    \item + Der vil aldrig være to instanser af singleton'en
\end{itemize}